// 完成 文章 所需的接口

const path = require('path');
const multer = require('multer'); // 用于获取formdata类型的请求体，同时完成文件上传
// 配置上传文件夹
const upload = multer({
    dest: path.join(__dirname, '../uploads') // 存放上传文件的文件夹
});
const db = require(path.join(__dirname, '../utils', 'db'));
const moment = require('moment');
const express = require('express');
const router = express.Router();

// router.get('xxx', async (req, res) => {

// });

// 发布新文章接口
router.post('/add', upload.single('cover_img'), async (req, res) => {
    // 如何接收POST请求体。必须使用第三方模块multer来处理POST请求体
    // console.log(req.body); // 获取文本类型的数据
    /*
    *   {
          title: '哈哈哈',
          content: '哈哈哈哈哈哈哈哈',
          cate_id: '3',
          state: '已发布'
        }
    * */
    // console.log(req.file); // 获取文件的信息
    /**
     *  {
          fieldname: 'cover_img',
          originalname: '1.jpg',
          encoding: '7bit',
          mimetype: 'image/jpeg',
          destination: '/Users/tangfengpo/Study/bj97+sh60/Node-09/big-event-server/uploads',
          filename: '0c86456393a6bd78cb860968a53a089d', // 文件名
          path: '/Users/tangfengpo/Study/bj97+sh60/Node-09/big-event-server/uploads/0c86456393a6bd78cb860968a53a089d',
          size: 35774
        }
     */
        // 组装数据
    let obj = req.body;
    obj.cover_img = req.file.filename;
    // obj.pub_date = '2020-03-11 23:15:25';
    // obj.pub_date = moment('任何类型的时间/不填表示处理当前时间').format('处理成你想要的格式');
    obj.pub_date = moment().format('YYYY-MM-DD HH:mm:ss');
    obj.author_id = req.user.id; // 要求登录之后，必须在token中保存用户的id
    // 添加入库
    let r = await db('insert into article set ?', obj);
    if (r && r.affectedRows > 0) {
        res.json({
            status: 0,
            message: '添加文章成功'
        });
    } else {
        res.json({
            status: 1,
            message: '添加文章失败'
        });
    }
});


// 获取文章列表数据
router.get('/list', async (req, res) => {
    // 接收所有的请求参数
    // let pagenum = req.query.pagenum;
    // let pagesize = req.query.pagesize;
    // let cate_id = req.query.cate_id;
    // let state = req.query.state;
    // 使用解构的方式，获取请求参数
    let {pagenum, pagesize, cate_id, state} = req.query;
    // 判断必填参数是否存在
    if (!pagesize || !pagenum) {
        return res.json({
            status: 1,
            message: '缺少必要参数'
        });
    }

    // 生成where条件，完成筛选工作
    let w = '';
    if (cate_id) {
        w += ' and cate_id=' + cate_id
    }
    if (state) {
        w += ` and state = '${state}'`
    }

    // 下面查询数据，把结果响应给客户端
    // 下面是SQL比较长，可以先在 Navicat中查询，没问题，复制过来
    let sql = `select a.Id, a.title, a.pub_date, a.state, c.name cate_name from article a
 join category c on a.cate_id=c.Id
 join user u on u.id=a.author_id
 where u.id = ? ${w}
 limit ${(pagenum-1)*pagesize}, ${pagesize}`;

    let r = await db(sql, req.user.id);

    // 查询总记录数
    let r2 = await db('select count(*) as total from article where author_id=?' + w, req.user.id);
    if (r && r2) {
        res.json({
            status: 0,
            message: '获取数据列表成功',
            data: r,
            total: r2[0].total
        });
    } else {
        res.json({
            status: 1,
            message: '查询失败'
        });
    }
});

// 根据Id完成删除文章接口
router.get('/delete/:id', async (req, res) => {
    let id = req.params.id;
    let r = await db('delete from article where Id=?', id);
    if (r && r.affectedRows>0) {
        res.json({
            status: 0,
            message: '删除文章成功'
        });
    } else {
        res.json({
            status: 1,
            message: '删除文章失败'
        });
    }
});

// 根据Id获取文章详情接口
router.get('/:id', async (req, res) => {
    let id = req.params.id;
    let r = await db('select * from article where Id=?', id);
    // console.log(r);
    if (r && r.length > 0) {
        res.json({
            status: 0,
            message: '获取文章详情成功',
            data: r[0]
        });
    } else {
        res.json({
            status: 1,
            message: '获取文章详情失败'
        });
    }
});

// 根据Id更新文章
router.post('/edit', upload.single('cover_img'), async (req, res) => {
    // req.body;
    // req.file;
    // console.log(req.file); // 如果没有选择图片，req.file === undefined
    let obj = req.body; // 这样的话，obj中有 Id、title、cate_id、content、state
    // 判断，修改的时候，客户端是否重新选择了图片(选择了图片，req.file是对象；没有选择图片，req.file是undefined)
    if (req.file) {
        obj.cover_img = req.file.filename;
    }
    // obj.pub_date = moment().format('YYYY-MM-DD HH:mm:ss');
    let r = await db('update article set ? where Id=?', [obj, req.body.Id]);
    if (r && r.affectedRows>0) {
        res.json({
            status: 0,
            message: '更新文章成功'
        })
    } else {
        res.json({
            status: 1,
            message: '更新文章失败'
        });
    }
});

module.exports = router;